package controller

import (
	"speechsoundsalarm/util"
	"time"
)

// GetPlayAlarm 获取定时提醒的闹铃信息
func GetPlayAlarm(d util.Data) (result []util.AlarmInfo, err error) {
	// 加载时区
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		return result, err
	}
	for index, v := range d.Info {
		// 如果是循环任务，返回此次循环进入下一次循环
		if v.AlarmType == "loop" {
			continue
		}
		// 将时间字符串转化成时间
		alarmTime, _ := time.ParseInLocation("2006-01-02 15:04", v.Date, loc)
		if err != nil {
			continue
		}

		// 加入Count属性后，逻辑改成达到提醒时间后就触发，不用限制在一个时间范围内
		if time.Now().After(alarmTime) {
			// 如果还有提醒次数
			if v.Count > 0 {
				d.Info[index].Count -= 1
				// v.Count -= 1
				util.Write(d)
				result = append(result, v)
			}
		}
	}
	return result, err
}

// GetLoopAlarm 获取循环提醒的闹铃信息
func GetLoopAlarm(d util.Data) (result []util.AlarmInfo, err error) {
	// 加载时区
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		return result, err
	}
	for index, v := range d.Info {
		// 如果是定时任务，返回此次循环进入下一次循环
		if v.AlarmType == "timing" {
			continue
		}
		// 将时间字符串转化成时间
		alarmTime, _ := time.ParseInLocation("2006-01-02 15:04", v.Date, loc)
		if err != nil {
			continue
		}

		// 如果当前时间在循环闹铃的开始时间+时间间隔之后,如果有设置闹铃的次数，在计数结束后更新闹铃记录开始时间，以便计算下一次闹铃的时间
		if time.Now().After(alarmTime.Add(time.Duration(v.Space) * time.Minute)) {
			// 记录每次提醒的循环播报次数
			if v.LoopCount < v.Count {
				d.Info[index].LoopCount = v.Count
			}
			// 如果还有提醒次数
			if v.Count > 0 {
				// 更新时间
				d.Info[index].Count -= 1
				util.Write(d)
				result = append(result, v)
			} else {
				// 更新时间
				d.Info[index].Date = time.Now().Format("2006-01-02 15:04")
				// 恢复播报次数
				d.Info[index].Count = d.Info[index].LoopCount
				util.Write(d)
				//
				v.Text = ""
				v.Count = d.Info[index].LoopCount
				result = append(result, v)
			}
		}
	}
	return result, err
}
